package com.tecode.java.oop;

/**
	1.面向对象与面向过程
		面向对象:
				面向对象，将功能封装进对象，强调具备了功能的对象。  关心的是谁能完成这件事情。
		面向过程:
				面向过程，强调的是功能行为。强调的是过程。关心过程。
	2.面向对象的三大特征
		封装  (Encapsulation)
		继承  (Inheritance)
		多态  (Polymorphism)

	3.OOP: Object Oriented Programming    面向对象的全称
	      面向过程：procedure oriented programming。
	      
	4.面向对象的思想概述
		1）。程序员从执行者转化成了指挥者。
		2）完成需求时：
				先去找具有所需功能的对象来用。
				如果该对象不存在，那么创建一个具有所需功能的对象。
				这样简化开发并提高复用。
				
	5.类(class)和对象(object)是面向对象的核心概念。
				类是对一类事物描述，是抽象的、概念上的定义。
				对象是实际存在的该类事物的每个个体，因而也称实例(instance)。
	6.面向对象的落地法则1
			1）设计一个类。
					设置类的成员
						类的成员一共有5个。
							成员变量（属性），成员方法（行为,方法,函数），构造器(构建类的对象的)，代码块，内部类

			2）。设计一个类，主要设置的是一个类的成员变量和成员发放
					①。成员属性：
								类的信息，就是他的属性。
								
								语法：
									权限修饰符   数据类型   成员变量的名称;
								成员变量，是放在类中方法之外的。
								成员变量在类中的任何地方都可以使用。
					②。成员方法：
							权限修饰符      [修饰符]      void|返回值类型    方法名([形参列表]){
					  				方法体;
					  				return  返回的具体的值;  -- 在有返回值类型是才有该语句。
					  		}
			
					③。如何构建一个类的对象？
					
							语法:
								类名称   对象名   = new  类名称();
								
							例子：
								Person p1 = new Person();
								
					④。如何给类中的成员变量赋值。
							语法：
								对象名.属性名= 值;
							例子：
								
								p1.name = "张三";

					⑤。在Person的外部使用成员变量的值。
							语法：
								对象名.属性名
					⑥。如果调用Person类中的方法?
							语法：
								对象名.方法名(实参);
					使用类中的成员的方式
						使用该类的对象.属性名或对象.方法来访问和使用。
			3)成员变量有默认值
					默认值和数组元素的默认值相同。
					
					int byte  short long   		默认值为0
					double  float  				默认值为0.0
					boolean						默认值为false
					char   						默认值值为' '
					引用数据类型					默认值为null
					
					引用数据类型：类，接口  枚举类   数组
			4).类的对象各自拥有独立的属性的值。
			
			
	7.成员变量（属性）和局部变量的区别？
	
		相同点:
			1).都必须指明数据类型。	
			2).都有作用范围。
			3).都必须先定义并赋值后才能使用。
		不同点：
			1).声明位置不同。
				成员变量，声明在类中方法外。
				局部变量，声明在方法内或方法上。
			2).作用范围不同。
				成员变量：作用范围在当前类的任意地方。
				局部变量：作用范围只作用在它声明出之后及下级{}中。
			3).权限修饰符不同。
				成员变量，有4个权限修饰符
						private   [default]    protected     public 
						
						private:私有的，只能在当前类的内部使用，而不能再当前类之外使用。						
						default(缺省):缺省的，作用在同一个包中。
						protected：受保护的，作用在同一个包中及当前类的子类中。
						public:在程序的任何地方都可以使用。
						
						作用范围最小的是private   default  protected     public 
						
						修饰符		类内部	同一个包	子类		任何地方
						private		Yes			
						(缺省)		Yes		Yes		
						protected	Yes		Yes		Yes	
						public		Yes		Yes		Yes		Yes
						
				局部变量：没有权限修饰符。
					       如果真要认为他有权限修饰符，那么它的权限修饰符和方法相同。
			4).默认值
					成员变量有默认值。
					局部变量，没有默认值。
			5).在内存的存放位置不同
					成语变量，是存放在堆中。
					局部变量，是存放在栈中。
			6).生命周期不同
					成员变量的生命周期，和对象相同。
					局部变量的生命周期，最后一次使用之后就销毁。
					
					GC:垃圾回收机制。守护进程。
			
		8.权限修饰符
				成员变量：4种。  private   [default]    protected     public 
				方法：4种              private   [default]    protected     public 
				类：2中   public  缺省的  在一个java文件中可以定义多个类（class）
						只能是和文件名同名的类才能使用public修饰符
						 [default]    public
						 
				在实际开发中一个文件中只定义一个类。
				
		9.jar文件的执行
		
					java  -jar   xxx.jar。
					在导出为jar时，需指定main方法所在的类的全类路径名  （包名.类名）
				
		
 */

public class TestOOP {	
	public static void main(String[] args) {
		System.out.println(args[1]);
		int a=10;
		//1.定一个Person的对象
		Person p1 = new Person();
		Person p2 = new Person();
		
		//给p1对象的name属性赋值为张三.
		p1.name = "张三";
		
		
		//获得p1对象的name属性值？
		String name = p1.name;
		p1.age =1000;
		System.out.println(p1.name); //张三
		System.out.println(p2.name); //null
		p1.eat();
		
		
	}

}

class A{
	int a ;
	public void t(){}
}

class B{
	
	
}

class C{
	
	
}
